package comandos;

import java.util.ArrayList;

import model.Notificacion;
import model.Usuario;
import protocol.MensajeComando;
import client.ClienteSession;

public class ObtenerNotificaciones implements ComandoCliente
{
	private Usuario usuario;
	private MensajeComando estadoOperacion;
	private static ArrayList<Notificacion> notificaciones;
	private final Object lock = new Object();
	
	//Este comando tiene que ejecutarse periodicamente y refrescar la lista de notificaciones
	@SuppressWarnings({ "unchecked", "static-access" })
	public void ejecutar (ClienteSession cliente, boolean invocadoPorServidor)
	{
		//Si fue invocado por el servidor (estoy recibiendo la lista de amigos)
		if (invocadoPorServidor)
		{
			try
			{
				synchronized (lock) {
					this.notificaciones = (ArrayList<Notificacion>) cliente.getInput().readObject();						
					lock.notify();
				}
			}
			catch (Exception e)
			{
				System.out.println(e.getMessage());
			}
			
		}
		else //Sino fue invocado por el servidor, estoy pidiendo la lista de amigos
		{
			try
			{
				//Envio al servidor un mensaje para obtener los amigos
				cliente.getOutput().flush();
				cliente.getOutput().writeObject(new MensajeComando ("obtener_notificaciones",0));
				//cliente.getOutput().flush();
				
				//Envio el usuario
				cliente.getOutput().writeObject(this.usuario);
				cliente.getOutput().flush();
				
			}
			catch (Exception e)
			{
				System.out.println(e.getMessage());
			}
		}
			
			

	}
	
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}


	public MensajeComando getEstadoOperacion() {
		return estadoOperacion;
	}


	public void setEstadoOperacion(MensajeComando estadoOperacion) {
		this.estadoOperacion = estadoOperacion;
	}


	public ArrayList<Notificacion> getNotificaciones() throws InterruptedException {
		synchronized (lock) {
			lock.wait();
			return notificaciones;
		}
	}


	@SuppressWarnings("static-access")
	public void setNotificaciones(ArrayList<Notificacion> notificaciones) {
		this.notificaciones = notificaciones;
	}
	
	
}
